package 系统复习.链表;

import datastructure.ListNode;

/**
 * 给你一个链表的头节点 head 和一个整数 val ，请你删除链表中所有满足 Node.val == val 的节点，并返回 新的头节点 。
 */

public class L203 {

    public static ListNode removeElements(ListNode head, int val) {

        // 不带虚拟头结点
        /*while(head!=null && head.val==val){
            head = head.next;
        }

        ListNode temp = head;
        while (temp != null) {
            while(temp.next!=null && temp.next.val == val){
                temp.next = temp.next.next;
            }
            temp = temp.next;
        }
        return head;*/

        // 带虚拟头结点
        while (head != null && head.val == val) {
            head = head.next;
        }
        if (head == null) return head;

        ListNode pre = head;
        ListNode temp = head.next;
        while (temp != null) {
            if (temp.val == val) {
                pre.next = temp.next;
            } else {
                pre = temp;
            }
            temp = temp.next;
        }
        return  head;


    }


    public static void main(String[] args) {

        ListNode head = ListNode.buildList(new int[]{1, 2, 6, 3, 4, 5, 6});
        ListNode listNode = removeElements(head, 6);
        ListNode.printListNode(listNode);

    }

}
